const { Controller } = require('egg');

class BlogController extends Controller {
    /**
     * 添加博客
     */
    async create() {
        // 拿到当前请求的用户信息，也就是当前登录用户
        // console.log('this.ctx.user', this.ctx.user);
        // 获取参数
        const { title, content } = this.ctx.request.body;
        // 非空校验
        if (!title || !content) {
            this.ctx.body = {
                code: 400,
                message: '缺少必须参数',
            };
            return;
        }
        // 调用 service 层，添加博客
        let res = await this.service.blog.create({
            title,
            content,
            uid: this.ctx.user.id,
        });
        // 判断是否添加成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: '添加博客失败',
            };
            return;
        }
        // 添加成功
        this.ctx.body = {
            code: 201,
            message: '博客添加成功',
        };
    }

    /**
     * 获取博客列表
     */
    async index() {
        // 调用 service 层，获取博客列表数据
        const blogs = await this.service.blog.readList();
        // 返回响应
        this.ctx.body = {
            code: 200,
            data: {
                list: blogs,
            },
            message: '获取博客列表成功',
        };
    }

    /**
     * 获取博客详情
     */
    async detail() {
        // 获取路径参数，路径参数就是博客 id
        const id = this.ctx.params.id;
        // 获取请求体数据
        // const { username, password } = this.ctx.request.body;
        // 获取查询参数
        // const { pagenum, pagesize } = this.ctx.query;
        const blog = await this.service.blog.find(id);
        // 只有发表人才能看博客详情内容
        // console.log('当前登录用户的信息', this.ctx.user);
        // console.log('res', res);
        // if (this.ctx.user.id !== blog.uid) {
        //     this.ctx.body = {
        //         code: 403,
        //         message: '你不是该博客的发表人，不能访问',
        //     };
        //     return;
        // }
        // 返回响应
        this.ctx.body = {
            code: 200,
            data: blog,
            message: '获取博客详情成功',
        };
    }

    /**
     * 修改博客信息
     */
    async update() {
        const { id } = this.ctx.params;
        const { title, content } = this.ctx.request.body;
        console.log(id, title, content);
        // 首先获取博客，然后再判断当前登录用户是不是博客发表人呢
        const blog = await this.service.blog.find(id);
        if (!blog) {
            this.ctx.body = {
                code: 404,
                message: '不存在该资源',
            };
            return;
        }
        // 是不是发表人
        if (this.ctx.user.id !== blog.uid) {
            this.ctx.body = {
                code: 403,
                message: '你不是该博客的发表人，不能修改',
            };
            return;
        }
        // 修改博客
        let res = await this.service.blog.update({ id, title, content });
        // 判断是否修改成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: '修改失败',
            };
        }
        // 修改成功
        this.ctx.body = {
            code: 204,
            message: '修改成功',
        };
    }
}

module.exports = BlogController;
